package com.day4.test2.my_final;

/**
 * @author 小坡
 * @date 2022/9/6  10:48
 **/
public class TestFinal {
    /*
     * finaL修饰变量:
     *       基本数据类型变量: 其值不能被更改
     *       引用数据类型变量: 地址值不能被更改，但是可以修改对象的属性值
     *
     * */
    public static void main(String[] args) {

        final int a = 10;
//        编译器认为你还是要修改a的值   所以不允许  即使值的大小相同
//        a = 10;

//        常量的命名规范:如果是一个单词，所有字母大写，如果是多个单词，所有字母大写，但是中间需要使用_分隔
        final int MAX = 20;
        final int MAX_VALUE = 30;

        final Student student = new Student();
        student.setName("张三");
        System.out.println(student.getName());  //  张三
        student.setName("李四");
        System.out.println(student.getName());   //张三  更改为  李四
//        由下一行代码可以知道 final修饰的引用数据变量 是内存地址不能被更改 但是对象的属性是可以更改的
//        student=new Student();

    }
}

class Student {
    //    finaL修饰成员变量初始化时机
//     1．在创建的时候，直接给值
//     2．在构造方法结束之前，完成赋值
    final int a;

    public Student() {
        a = 10;
    }

    final int b = 20;
//    下边这种就会出错  只能是以上两种方法
//    final int a;   //   虽然a的默认值是0  但是 这种不可以！！！


    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


//   注意当父类被final修饰的时候   子类则将不可以继承父类
/*final class Fu{

}
class Zi extends Fu{

}*/
